\documentclass[a4paper,10pt]{article}

\usepackage{fullpage}
\usepackage{todonotes}
\usepackage[utf8]{inputenc}
%\usepackage[spanish]{babel}

\begin{titlepage}
\title{Software Requirements Specification - ReclamaMem}
\author{Luis Barrueco}
\end{titlepage}

\begin{document}

\maketitle

\begin{abstract}
This software requirements specification describes in an accurate manner the
attributes and constraints that will be followed in the development process of
ReclamaMem, a software library that aims to maximize utilisation of physical
memory in high performance computing programs.
\end{abstract}

\section{Introduction}

\subsection{Conventions}
The key words ``MUST'', ``MUST NOT'', ``REQUIRED'', ``SHALL'', ``SHALL NOT'',
``SHOULD'', ``SHOULD NOT'', ``RECOMMENDED'',  ``MAY'', and ``OPTIONAL'' in this
document are to be interpreted as described in RFC 2119.

Aclarar terminos como 'libreria', 'sistema', 'usuario'.

\subsection{Project scope}
El proyecto a desarrollar es una libreria de software que permita a las
aplicaciones usuarios la maximización de la utilización de la memoria física
disponible en el sistema anfitrión, evitando a toda costa utilizar la memoria de
intercambio. Adicionalmente, se desarrollaran las interfaces adecuadas para la
correcta integración con otras aplicaciones desarrolladas por FuDePAN:
concretamente la librería debera estar estructurada para funcionar como un
backend de \todo{¿Versiones concretas de Feca, clusterer?} Feca, y se adaptaran
otros programas, como el parallel clusterer, para poder aprovechar la
funcionalidad otorgada por ReclamaMem.

Los beneficios que se esperan obtener a partir del desarrollo de este proyecto tienen
que ver con el incremento en la performance de aplicaciones de alto rendimiento
utilizadas en la fundación, por un lado debido al fuerte aprovechamiento de la
memoria RAM de los sistemas de hardware, y por el otro lado por la eliminación
de la penalización en velocidad que impone el paginado de datos en memoria
secundaria de alta latencia.

%(Provide a short description of the software being specified and its purpose, including relevant benefits, objectives, and goals. Relate the software to corporate goals or business strategies. If a separate vision and scope document is available, refer to it rather than duplicating its contents here. An SRS that specifies the next release of an evolving product should contain its own scope statement as a subset of the long-term strategic product vision.)

\section{Description}

\subsection{Major features}
\begin{itemize}
\item Maximización del uso de memoria fisica: cada vez que hay memoria disponible, el sistema:
 \begin{itemize}
 \item Señaliza al programa cliente
 \item Reserva esa memoria para el programa cliente
 \end{itemize}

\item Se evita el acceso a memoria swapeada: cuando el sistema desaloja una pagina que
contiene memoria reservada por la libreria, la librería descarta todos los datos
que estuvieran guardados en la pagina y señaliza al programa para comunicarle qué datos fueron descartaos.
\end{itemize}

\subsection{Intended users}
Principalmente, la librería se desarrolla teniendo en cuenta las necesidades funcionales de FuDePAN. En particular, se desea que ReclamaMem pueda ser integrado como un \textit{backend} de Feca (FuDePAN Extensible Cache).

\subsection{Operating environment}
La plataforma elegida para desarrollar esta librería es el sistema operativo Linux.

\subsection{Implementation constraints}
Una aplicacion que utilizara la librería no debería ver perjudicada su performance por utilizar la funcionalidad brindada.

\subsection{External dependencies}
?

\section{Functional requirements}

\subsection{Feature 1: Comunicar al cliente cuando hay memoria disponible}
\subsubsection{Description}
\subsubsection{Priority}
\subsubsection{Acceptance criteria}

\subsection{Feature 2: Comunicar al cliente cuando se haya reclamado memoria}
\subsubsection{Description}
\subsubsection{Priority}
\subsubsection{Acceptance criteria}



\section{External interfaces}
(Describe the connections between this product and other specific software components (name and version))



\section{Non functional requirements}

\subsection{Performance requirements}

\subsection{Software Quality Attributes}
(correctness, testing, coding style, versioning, usability... ver Thesis guideline)

\subsection{Other requirements}
(license, documentation)

%\tableofcontents


\end{document}
